<template>
  <BasicModal
      @register="registerModal"
      :title="modalTitle"
      :width="width"
      @ok="handleOk"
      v-bind="$attrs">
    <JUpload ref="uploadRef" :value="value" v-bind="uploadBinds.props" @change="emitValue"/>
  </BasicModal>
</template>

<script lang="ts" setup>
import { ref, unref, reactive, computed, nextTick } from 'vue'
import { BasicModal, useModalInner } from '/@/components/Modal'
import { useMessage } from '/@/hooks/web/useMessage'
import JUpload from './JUpload.vue'
import { UploadTypeEnum } from './upload.data'
import { propTypes } from '/@/utils/propTypes'

const { createMessage } = useMessage()
const emit = defineEmits(['change', 'update:value', 'register'])
const props = defineProps({
  value: propTypes.oneOfType([propTypes.string, propTypes.array]),
  width: propTypes.number.def(520),
})

const uploadRef = ref()
const uploadBinds = reactive({ props: {} as any })
const modalTitle = computed(() => uploadBinds.props?.fileType === UploadTypeEnum.image ? '图片上传' : '文件上传')

// 注册弹窗
const [registerModal, { closeModal }] = useModalInner(async data => {
  uploadBinds.props = unref(data) || {}
  if ([UploadTypeEnum.image, 'img', 'picture'].includes(uploadBinds.props?.fileType)) {
    uploadBinds.props.fileType = UploadTypeEnum.image
  } else {
    uploadBinds.props.fileType = UploadTypeEnum.file
  }
  nextTick(() => uploadRef.value.addActionsListener())
})

function handleOk() {
  closeModal()
}

function emitValue(value) {
  emit('change', value)
  emit('update:value', value)
}

</script>
